import numpy as np

# 假设我们有多个 bom_structure 数据
bom_structures = [
    {
        "WGPart1": {
            "SBB1": [],
            "SBB2": ["SBB3"],
            "SBB3": ["SBB4", "SBB6"]
        },
        "WGPart2": {
            "SBB3": ["SBB4"],
            "SBB2": ["SBB1"],
            "SBB4": ["Part3"],
        },
        "WGPart3": {
            "SBB1": [],
            "SBB3": ["SBB5"]
        }
    },
    # 可以添加更多的 bom_structure 数据
]

# 准备保存到 npz 文件中的数据
npz_data = {}

# 将每个 bom_structure 转换为一个 NumPy 对象数组
for idx, bom_structure in enumerate(bom_structures):
    # 将 bom_structure 转换为一个列表，其中每个元素是一个元组 (部件名称，组件列表)
    bom_list = [(part, list(components.keys()), list(components.values())) for part, components in bom_structure.items()]
    # 将列表转换为 NumPy 对象数组
    bom_array = np.array(bom_list, dtype=object)
    # 将数组添加到 npz_data 中，使用索引作为键
    npz_data[f'bom_structure_{idx}'] = bom_array

# 保存到 npz 文件
np.savez_compressed('multiple_bom_structures.npz', **npz_data)


# 如果需要从 npz 文件中读取数据，可以使用以下代码：
# with np.load('multiple_bom_structures.npz') as npz_file:
#     for idx, (part, sub_parts, components) in npz_file[f'bom_structure_{idx}'].items():
#         print(f"BOM Structure {idx}, Part: {part}, Sub-Parts: {sub_parts}, Components: {components}")